package cn.tedu.csmall.stock.webapi.quartz;

import cn.tedu.csmall.stock.webapi.quartz.rabbit.RabbitMQJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;


// QuartzConfig类用于绑定Job和Trigger的触发关系
// 这个触发实际上会由Scheduler来调度,但是这个对象已经被SpringBoot管理了
// 我们只需要编写将JobDetail和Trigger对象保存到Spring容器即可
@Configuration
public class QuartzConfig {

    // SpringBoot启动时,使用@Bean标记的方法,方法的返回值会自动保存在Spring容器中
    @Bean
    public JobDetail showTime(){
        // JobDetail对象中配置要运行的Job实现类信息
        // JobBuilder.newJob这个方法就是关联Job实现类的方法
        return JobBuilder.newJob(QuartzJob.class)
                // 给当前任务起名,多个任务名称不要重复
                .withIdentity("showTime")
                // 在SpringBoot默认环境下,JobDetail对象如果没有触发器绑定,可能会被GC回收
                // 设置storeDurably()方法后,JobDetail对象即使没有被绑定,也不会被回收
                .storeDurably()
                .build();
    }

    // 使用@Bean注解,将触发器对象Trigger,也保存到Spring容器中
    @Bean
    public Trigger showTimeTrigger(){
        // 声明Cron表达式,确定这个触发的时间
        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
                //CronScheduleBuilder.cronSchedule("0 33 10 4 4 ?");
        return TriggerBuilder.newTrigger()
                // 设置要触发的JobDetail对象
                .forJob(showTime())
                // 绑定cron表达式
                .withSchedule(cron)
                // 给当前触发器起名,也是不要和其它名称重复
                .withIdentity("showTimeTrigger")
                .build();
    }


    //@Bean
    public JobDetail reduceStock(){
        return JobBuilder.newJob(RabbitMQJob.class)
                .withIdentity("reduceStock")
                .storeDurably()
                .build();
    }
    //@Bean
    public Trigger reduceStockTrigger(){

        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(reduceStock())
                .withSchedule(cron)
                .withIdentity("reduceStockTrigger")
                .build();
    }







}
